package excepciones;

import java.util.logging.Level;
import java.util.logging.Logger;

import util.Utiles;

public class AvwException extends Exception {

    private Throwable throwable;
    private String mensaje="No existe ningun resultado para su peticion.";
    private Boolean valor;
    private String accionATomar;
    static final Logger logger = Utiles.iniciarLogger("AvwException",false);

    /**
     * Genera automaticamente un log de la excepcion
     * @param mensaje String mensaje de la excepcion
     */
    public AvwException(String mensaje) {
        
        this.setMensaje(mensaje);
        logger.log(Level.SEVERE,mensaje);
    }

    /**
     * Genera automaticamente un log de la excepcion
     * @param mensaje String mensaje de la excepcion
     * @param throwable Throwable  la excepcion lanzada
     */
    public AvwException(String mensaje, Throwable throwable) {
    
        this.setMensaje(mensaje);
        this.throwable=throwable;
        logger.log(Level.SEVERE,mensaje,throwable);
    }

    /**
     * Genera automaticamente un log de la excepcion
     * @param mensaje String mensaje de la excepcion
     * @param throwable Throwable  la excepcion lanzada
     * @param valor Boolean si se muestra o no al usuario
     */
    public AvwException(String mensaje, Throwable throwable, Boolean valor) {
        this.setMensaje(mensaje);
        this.throwable=throwable;
        this.valor=valor;
        logger.log(Level.SEVERE,mensaje,throwable);
    }
    
    
    public AvwException(String mensaje,String accion) {
        this.setMensaje(mensaje);
        this.accionATomar = accion;
        logger.log(Level.SEVERE,mensaje);
    }

    /**
     * Genera automaticamente un log de la excepcion
     * @param mensaje String mensaje de la excepcion
     * @param valor Boolean si se muestra o no al usuario
     */
    public AvwException(String mensaje, Boolean valor) {
        this.setMensaje(mensaje);
        this.valor=valor;
        logger.log(Level.SEVERE,mensaje);
    }

    /**
     * Genera automaticamente un log de la excepcion
     * @param throwable Throwable  la excepcion lanzada
     * @param valor Boolean si se muestra o no al usuario
     */
    public AvwException(Throwable throwable, Boolean valor) {
        this.throwable = throwable;
        this.valor=valor;
        logger.log(Level.SEVERE,this.throwable.getMessage(),this.throwable);
    }

    /**
     * Genera automaticamente un log de la excepcion
     * @param throwable Throwable  la excepcion lanzada
     */
    public AvwException(Throwable throwable) {
        this.throwable = throwable;
    }
    
    public AvwException(Throwable throwable, String accion) {
        this.throwable = throwable;
        this.accionATomar = accion;
        logger.info("Accion: " + accion);
    }

    /**
     * Genera automaticamente un log de la excepcion
     * @return throwable Throwable  la excepcion lanzada
     */
    public Throwable getThrowable() {
        return throwable;
    }

    private void setThrowable(Throwable throwable) {
        this.throwable = throwable;
    }
    


    /**
     * @return mensaje String mensaje de la excepcion
     */
    public String getMensaje() {
        return mensaje;
    }

    private void setMensaje(String mensaje) {
        if(mensaje==null || mensaje.equals(""))
            this.mensaje = mensaje;
    }

    /**
     * @return valor Boolean si se muestra o no al usuario
     */
    public Boolean getValor() {
        return valor;
    }

    private void setValor(Boolean valor) {
        this.valor = valor;
    }

    public String getAccionATomar() {
        return accionATomar;
    }

    public void setAccionATomar(String accionATomar) {
        this.accionATomar = accionATomar;
    }
}
